group { name: "e/shelf/default/base"; nomouse;
   data {
      /* this tells e the shelf is shaped, not rectangular */
//      item: "shaped" "1";
      /* this tells e the number of pixels of the shelf to leave "exposed"
       * when auto-hiding the shelf */
      item: "hidden_state_size" "2";
      /* This makes the border hide instantly after the given amount of
       * seconds - in this case 3 seconds. This means there will be no
       * visible part of the shelf after this time at all as it will be
       * totally hidden */
//      item: "instant_delay" "3.0";
   }
   parts {
      rect { "mouse"; mouse;
         desc {
            color: 0 0 0 0; // no cc
         }
      }
      part { name: "bg"; type: RECT;
         description { state: "default" 0.0;
            color_class: "/bg/normal/shelf/default";
         }
         description { state: "vert" 0.0;
            inherit: "default" 0.0;
         }
      }
      spacer { "sizer";
         scale: 1;
         description { state: "default" 0.0;
            rel1.offset: 4 0;
            rel2.offset: -5 -1;
            offscale;
         }
         description { state: "vert" 0.0;
            rel1.offset: 0 4;
            rel2.offset: -1 -5;
            offscale;
         }
      }
      part { name: "e.swallow.content"; type: SWALLOW; mouse;
         desc {
            rel.to: "sizer";
            link.base: "e,state,visible" "e";
         }
         desc { "hidden"; hid;
            rel.to: "sizer";
            link.base: "e,state,hidden" "e";
         }
      }
      rect { "events"; repeat; mouse;
         desc {
            color: 0 0 0 0; // no cc
         }
      }
      programs  {
#define ORIENT_SATE(_ORIENT, _STATE) \
         program { signal: "e,state,orientation,"_ORIENT; source: "e"; \
            action: STATE_SET _STATE 0.0; \
            target: "sizer"; \
         }
      }
      ORIENT_SATE("top", "default")
      ORIENT_SATE("top_left", "default")
      ORIENT_SATE("top_right", "default")
      ORIENT_SATE("bottom", "default")
      ORIENT_SATE("bottom_left", "default")
      ORIENT_SATE("bottom_right", "default")
      ORIENT_SATE("left", "vert")
      ORIENT_SATE("left_top", "vert")
      ORIENT_SATE("left_bottom", "vert")
      ORIENT_SATE("right", "vert")
      ORIENT_SATE("right_top", "vert")
      ORIENT_SATE("right_bottom", "vert")
#undef ORIENT_SATE
   }
}

group { name: "e/shelf/default/inset"; nomouse;
   alias: "e/shelf/alternate/inset";
   alias: "e/shelf/invisible/inset";
   alias: "e/shelf/translucent/inset";
   images.image: "shadow_circle_horiz.png" COMP;
   images.image: "shadow_circle_vert.png" COMP;
   parts {
      rect { "mouse"; mouse;
         desc {
            color: 0 0 0 0; // no cc
         }
      }
      part { name: "base"; type: RECT;
         description { state: "default" 0.0;
            color: 0 0 0 0; // no cc
         }
      }
      part { name: "clip"; type: RECT;
         scale: 1;
         description { state: "default" 0.0;
            rel1.offset: 3 0;
            rel2.offset: -4 -1;
            offscale;
         }
         description { state: "vert" 0.0;
            rel1.offset: 0 3;
            rel2.offset: -1 -4;
            offscale;
         }
      }
      spacer { "sizer";
         scale: 1;
         description { state: "default" 0.0;
            rel1.offset: (3 + SHELFPAD) SHELFPAD;
            rel2.offset: (-4 - SHELFPAD) (-1 - SHELFPAD);
            offscale;
         }
         description { state: "vert" 0.0;
            rel1.offset: SHELFPAD (3 + SHELFPAD);
            rel2.offset: (-1 - SHELFPAD) (-4 - SHELFPAD);
            offscale;
         }
      }
      part { name: "e.swallow.content"; type: SWALLOW; mouse;
         clip_to: "clip";
         desc {
            rel.to: "sizer";
            link.base: "e,state,visible" "e";
         }
         desc { "hidden"; hid;
            rel.to: "sizer";
            link.base: "e,state,hidden" "e";
         }
      }
      part { name: "sh_horiz_clip"; type: RECT;
         description { state: "default" 0.0;
            rel.to: "clip";
            visible: 1;
         }
         description { state: "vert" 0.0;
            inherit: "default" 0.0;
            visible: 0;
         }
      }
      part { name: "sh_l"; nomouse;
         clip_to: "sh_horiz_clip";
         scale: 1;
         description { state: "default" 0.0;
            rel.to: "clip";
            rel2.relative: 0.0 1.0;
            image.normal: "shadow_circle_vert.png";
            min: 0 0;
            color: 255 255 255 0; // no cc
            color_class: "/shadow/normal/shelf/inset";
         }
         description { state: "active" 0.0;
            inherit: "default" 0.0;
            min: 16 0;
            color: 255 255 255 255; // no cc
         }
      }
      part { name: "sh_r"; nomouse;
         clip_to: "sh_horiz_clip";
         scale: 1;
         description { state: "default" 0.0;
            rel.to: "clip";
            rel1.relative: 1.0 0.0;
            image.normal: "shadow_circle_vert.png";
            min: 0 0;
            color: 255 255 255 0; // no cc
            color_class: "/shadow/normal/shelf/inset";
         }
         description { state: "active" 0.0;
            inherit: "default" 0.0;
            min: 16 0;
            color: 255 255 255 255; // no cc
         }
      }
      part { name: "sh_vert_clip"; type: RECT;
         description { state: "default" 0.0;
            rel.to: "clip";
            visible: 0;
         }
         description { state: "vert" 0.0;
            inherit: "default" 0.0;
            visible: 1;
         }
      }
      part { name: "sh_t"; nomouse;
         clip_to: "sh_vert_clip";
         scale: 1;
         description { state: "default" 0.0;
            rel.to: "clip";
            rel2.relative: 1.0 0.0;
            image.normal: "shadow_circle_horiz.png";
            min: 0 0;
            color: 255 255 255 0; // no cc
            color_class: "/shadow/normal/shelf/inset";
         }
         description { state: "active" 0.0;
            inherit: "default" 0.0;
            min: 0 16;
            color: 255 255 255 255; // no cc
         }
      }
      part { name: "sh_b"; nomouse;
         clip_to: "sh_vert_clip";
         scale: 1;
         description { state: "default" 0.0;
            rel.to: "clip";
            rel1.relative: 0.0 1.0;
            image.normal: "shadow_circle_horiz.png";
            min: 0 0;
            color: 255 255 255 0; // no cc
            color_class: "/shadow/normal/shelf/inset";
         }
         description { state: "active" 0.0;
            inherit: "default" 0.0;
            min: 0 16;
            color: 255 255 255 255; // no cc
         }
      }
      rect { "events"; repeat; mouse;
         desc {
            color: 0 0 0 0; // no cc
         }
      }
   }
   programs {
#define ORIENT_SATE(_ORIENT, _STATE) \
   program { signal: "e,state,orientation,"_ORIENT; source: "e"; \
     action: STATE_SET _STATE 0.0; \
     target: "sizer"; \
     target: "clip"; \
     target: "sh_horiz_clip"; \
     target: "sh_vert_clip"; \
   }
      ORIENT_SATE("top", "default")
      ORIENT_SATE("top_left", "default")
      ORIENT_SATE("top_right", "default")
      ORIENT_SATE("bottom", "default")
      ORIENT_SATE("bottom_left", "default")
      ORIENT_SATE("bottom_right", "default")
      ORIENT_SATE("left", "vert")
      ORIENT_SATE("left_top", "vert")
      ORIENT_SATE("left_bottom", "vert")
      ORIENT_SATE("right", "vert")
      ORIENT_SATE("right_top", "vert")
      ORIENT_SATE("right_bottom", "vert")
#undef ORIENT_SATE
      program { signal: "e,state,scroll,begin"; source: "e";
         action: STATE_SET "default" 0.0;
         transition: SINUSOIDAL 0.5 CURRENT USE_DURATION_FACTOR 1;
         target: "sh_l";
         target: "sh_t";
      }
      program { signal: "e,state,scroll,begin"; source: "e";
         action: STATE_SET "active" 0.0;
         transition: SINUSOIDAL 0.5 CURRENT USE_DURATION_FACTOR 1;
         target: "sh_r";
         target: "sh_b";
      }
      program { signal: "e,state,scroll,middle"; source: "e";
         action: STATE_SET "active" 0.0;
         transition: SINUSOIDAL 0.5 CURRENT USE_DURATION_FACTOR 1;
         target: "sh_l";
         target: "sh_t";
      }
      program { signal: "e,state,scroll,middle"; source: "e";
         action: STATE_SET "active" 0.0;
         transition: SINUSOIDAL 0.5 CURRENT USE_DURATION_FACTOR 1;
         target: "sh_r";
         target: "sh_b";
      }
      program { signal: "e,state,scroll,end"; source: "e";
         action: STATE_SET "active" 0.0;
         transition: SINUSOIDAL 0.5 CURRENT USE_DURATION_FACTOR 1;
         target: "sh_l";
         target: "sh_t";
      }
      program { signal: "e,state,scroll,end"; source: "e";
         action: STATE_SET "default" 0.0;
         transition: SINUSOIDAL 0.5 CURRENT USE_DURATION_FACTOR 1;
         target: "sh_r";
         target: "sh_b";
      }
      program { signal: "e,state,scroll,none"; source: "e";
         action: STATE_SET "default" 0.0;
         transition: SINUSOIDAL 0.5 CURRENT USE_DURATION_FACTOR 1;
         target: "sh_l";
         target: "sh_t";
      }
      program { signal: "e,state,scroll,none"; source: "e";
         action: STATE_SET "default" 0.0;
         transition: SINUSOIDAL 0.5 CURRENT USE_DURATION_FACTOR 1;
         target: "sh_r";
         target: "sh_b";
      }
   }
}

group { name: "e/shelf/default/plain"; nomouse;
   alias: "e/shelf/alternate/plain";
   alias: "e/shelf/invisible/plain";
   alias: "e/shelf/translucent/plain";
   parts {
      rect { "mouse"; mouse;
         desc {
            color: 0 0 0 0; // no cc
         }
      }
      part { name: "base"; type: RECT;
         description { state: "default" 0.0;
            color: 0 0 0 0; // no cc
         }
      }
      part { name: "clip"; type: RECT;
         description { state: "default" 0.0;
         }
      }
      spacer { "sizer";
         scale: 1;
         desc {
            rel1.offset: SHELFPAD SHELFPAD;
            rel2.offset: (-1 - SHELFPAD) (-1 - SHELFPAD);
            offscale;
         }
      }
      part { name: "e.swallow.content"; type: SWALLOW; mouse;
         clip_to: "clip";
         desc {
            rel.to: "sizer";
            link.base: "e,state,visible" "e";
         }
         desc { "hidden"; hid;
            rel.to: "sizer";
            link.base: "e,state,hidden" "e";
         }
      }
      rect { "events"; repeat; mouse;
         desc {
            color: 0 0 0 0; // no cc
         }
      }
   }
}

group { name: "e/shelf/alternate/base"; nomouse;
   inherit: "e/shelf/default/base";
   parts {
      part { name: "bg"; type: RECT;
         description { state: "default" 0.0;
            color_class: "/bg/normal/shelf/alt";
         }
         description { state: "vert" 0.0;
            color_class: "/bg/normal/shelf/alt";
         }
      }
   }
}

group { name: "e/shelf/invisible/base"; nomouse;
   inherit: "e/shelf/default/base";
   data {
      item: "shaped" "1";
      item: "noshadow" "1";
   }
   parts {
      part { name: "bg";
         description { state: "default" 0.0;
            visible: 0;
         }
         description { state: "vert" 0.0;
            visible: 0;
         }
      }
   }
}

group { name: "e/shelf/translucent/base"; nomouse;
   inherit: "e/shelf/default/base";
   data {
      item: "shaped" "1";
      item: "noshadow" "1";
   }
   parts {
      part { name: "bg";
         description { state: "default" 0.0;
            color_class: "/bg/normal/shelf/translucent";
         }
         description { state: "vert" 0.0;
            color_class: "/bg/normal/shelf/translucent";
         }
      }
   }
}
